package stage;
/**
* Descrive i metodi fondamentali pel tipo Lista.
*
* @author Matteo Cuccato
* @author Nicola Girardi
*
*/
public interface Lista{


	/**
	* Indica se la lista è vuota.
	*
	* @return true se è vuota, false altrimenti
	*
	*/
	boolean isEmpty();


	/**
	* Restituisce il numero degli oggetti presenti nella lista.
	*
	* @return intero
	*
	*/
	int size();


	/**
	* Restituisce l'oggetto di indice k se è presente, IndexOutOfBoundsException altrimenti.
	*
	* @param k indice dell'elemento da cercare
	* @return oggetto
	* @exception IndexOutOfBoundsException se l'oggetto di indice k non viene trovato
	*
	*/
	Object get(int k) throws IndexOutOfBoundsException;


	/**
	* Rimuove l'oggetto con indice K dalla lista, se è presente, restituisce l'oggetto e compatta la lista.
	* Se l'oggetto non è presente IndexOutOfBoundsException.
	*
	* @param k indice dell'elemento da cercare, rimuovere e restituire
	* @return oggetto
	* @exception IndexOutOfBoundsException se l'oggetto di indice k non viene trovato
	*
	*/
	Object remove(int k) throws IndexOutOfBoundsException;



	/**
	* Inserisce l'oggetto o in posizione k all'interno della lista.
	* Se necessario aumenta la dimensione della lista.
	* IndexOutOfBoundsException se l'indice k si riferisce a una posizione fuori dalla lista.
	*
	* @param k indice dell'elemento da inserire
	* @param o oggetto da inserire nella lista in posizione k
	* @exception IndexOutOfBoundsException se l'oggetto di l'indice k punta fuori dalla lista
	*
	*/
	void insert(int k, Object o) throws IndexOutOfBoundsException;


}//end interface Lista